// ；利用socket.io 实现多人聊天室的功能
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
var express = require('express')

// 配置静态资源目录
app.use(express.static('./public'))

// 接收连接服务的用户信息
var userList = [];


const TYPE_ON = 0;
const TYPE_CHAT = 1;
const TYPE_LEAVE = 2;
const TYPE_SOME = 3;

// socket.io 监听连接, socket 表示当前用户的连接
// socket.emit : 表示触发事件
// socket.on : 表示注册事件
io.on('connection', (socket) => {
  console.log('a user connected');

  // socket.emit():发送消息到对方，第一个参数时自定义监听事件名称，第二个参数是发送的参数

  // 接收用户发送的消息
  socket.on('sendLogin',data=>{
        // console.log(data);
    // 用户名重复了
    if(userList.some(item=>item.username === data.username)) {
      // 只需要告诉本用户
      socket.emit('loginSuccess',{
        type:TYPE_SOME,
        msg:`用户名【${data.username}】重复了`,
      })

    }else{
      //把用户信息存进数组中
      userList.push(data)

      // 配置当前连接用户的信息
      socket.username = data.username;
      socket.avatar = data.avatar;

      //socket.emit()将当前登录用户列表发送给当前用户
      // socket.emit('loginSuccess',userList)
      // io.emit()将新增用户信息广播给所有在线的用户
      io.emit('loginSuccess',{
        type:TYPE_ON,
        msg:`用户【${data.username}】加入了聊天室`,
        time:new Date().toLocaleTimeString()

      })
      // 将当前用户添加到在线用户组中，广播给所有人
      io.emit('addUser',userList)
    }
  })


  // 注册接收浏览器发送聊天内容的事件
  socket.on('sendContent',data=>{
    // console.log(data);
    //广播
    io.emit('sendContendResponse',{
      msg:data,
      username:socket.username,
      avatar:socket.avatar,
      type:TYPE_CHAT
    })
  })


  // 发送图片
  socket.on('sendImg',data=>{
    //广播到所有在线用户
    io.emit('sendImgResponse',{
      img:data,
      username:socket.username,
      avatar:socket.avatar,
      type:TYPE_CHAT
    })
  })
  

// 用户断开连接 -- 将消息广播给所有在线用户
socket.on('disconnect',()=>{
  console.log('close事件');
  io.emit('leaveEvent',{
    msg:`用户【${socket.username}】离开了聊天室`,
    type:TYPE_LEAVE,
    time:new Date().toLocaleTimeString()
  })
  io.emit('addUser',userList)
})



socket.on('error',()=>{
  console.log('用户连接出现异常');
 })
});






http.listen(3000, () => {
  console.log('http://localhost:3000');
});

